#include "blake3.h"
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main(void) {
FILE *file;
    unsigned char buf[65536];
    size_t n;
    blake3_hasher hasher;

    // 打开文件，确保以二进制模式打开
    file = fopen("path_to_your_file", "rb");
    if (!file) {
        fprintf(stderr, "Failed to open file: %s\n", strerror(errno));
        return 1;
    }

    // 初始化blake3 hasher
    blake3_hasher_init(&hasher);

    // 循环读取文件内容并更新hasher
    while ((n = fread(buf, 1, sizeof(buf), file)) > 0) {
        blake3_hasher_update(&hasher, buf, n);
    }

    // 检查fread是否因为错误而终止
    if (ferror(file)) {
        fprintf(stderr, "File reading error: %s\n", strerror(errno));
        fclose(file);
        return 1;
    }

    // 关闭文件
    fclose(file);

    // 如果需要，可以在这里完成哈希计算，例如调用blake3_hasher_finalize
  uint8_t output[BLAKE3_OUT_LEN];
  blake3_hasher_finalize(&hasher, output, BLAKE3_OUT_LEN);

  // Print the hash as hexadecimal.
  for (size_t i = 0; i < BLAKE3_OUT_LEN; i++) {
    printf("%02x", output[i]);
  }
  printf("\n");
  return 0;
}
